module fn.logic.fol.semantics.Structure

open fn.pattern.Functor
open fn.adt.Tree



type FolStructure<'a,'ident> when 'ident : comparison =
    { D : 'a list; I : Map<'ident,Functor<'a>>; }
    
    member this.evaluate term =
        let I = this.I
        match term with
        | Node(op, n) when Map.containsKey op I -> (Map.find op I).Value
        | _ -> failwith "semantic error"

